package com.produto.persistencia.dao;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import com.produto.modelo.Produto;
import com.produto.persistencia.HibernateUtil;

public class ProdutoDAO {

	private Session sessao;
	
	public ProdutoDAO() {
		sessao = HibernateUtil.getSessionFactory().openSession();
	}
	
	public void insert(Produto p) {
		sessao.beginTransaction();
		sessao.save(p);
		sessao.getTransaction().commit();
		sessao.close();
	}
	
	@SuppressWarnings("unchecked")
	public List<Produto> selectTodos() {
		sessao.beginTransaction();
		Query q = sessao.getNamedQuery("pesq_produto_ordenada");
		List<Produto> resultado = q.list();
		sessao.getTransaction().commit();
		sessao.close();
		return resultado;
	}
	
	public void delete(Produto p) {
		sessao.beginTransaction();
		sessao.delete(p);
		sessao.getTransaction().commit();
		sessao.clear();
	}
	
	public void update(Produto p) {
		sessao.beginTransaction();
		sessao.update(p);
		sessao.getTransaction().commit();
		sessao.clear();
	}
	
	@SuppressWarnings("unchecked")
	public List<Produto> pesquisarNome(String nomeConsultar) {
		sessao.beginTransaction();
		Query q = sessao.getNamedQuery("pesq_prod_aproximacao");
		q.setString("nome", "%" +nomeConsultar +"%");
		List<Produto> resultado = q.list();
		sessao.getTransaction().commit();
		sessao.close();
		return resultado;
	}
}
